// 依赖倒置原则

// 不符合依赖倒置原则
// class MYSQLDatabase {
//   // 连接数据库
//   connect() {}
//   // 保存数据
//   save(user){}
// }
// class UserRepository {
//   private database: MYSQLDatabase
//   constructor() { // 不符合依赖倒置原则 UserRepository 类依赖 MYSQLDatabase 类
//     this.database = new MYSQLDatabase
//   }
//   save(user) {
//     this.database.connect() // 连接数据库
//     this.database.save(user) // 保存数据
//   }
// }


// 符合依赖倒置原则
interface Database {
  connect(): void
  save(user): void
}
class UserRepository {
  database: Database
  constructor(database: Database) { // 符合依赖倒置原则 类依赖抽像 ( 接口或抽像类 ) 而不是依赖具体的类
    this.database = database
  }
  save(user) {
    this.database.connect() // 连接数据库
    this.database.save(user) // 保存数据库
  }
}
class MYSQLDatabase implements Database {
  // 连接数据库
  connect() { }
  // 保存数据
  save(user) {}
}
const mysqlDatabase = new MYSQLDatabase()
const userRepository1 = new UserRepository(mysqlDatabase)
class MONGODatabase implements Database {
  // 连接数据库
  connect(){}
  // 保存数据
  save(user) {}
}
const mongoDatabase = new MONGODatabase()
const userRepository2 = new UserRepository(mongoDatabase)
